package com.briup.bookstore.config;

import com.briup.bookstore.web.interceptor.AuthInterceptor;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * SpringMVC的配置类
 */
@Configuration
@RequiredArgsConstructor
public class SpringWebConfig implements WebMvcConfigurer {

    private final AuthInterceptor authInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 将登录认证拦截器注册到 SpringMVC组件中
        registry.addInterceptor(authInterceptor)
                // 表示需要拦截的路径有哪些，/**表示所有的路径
                .addPathPatterns("/**")
                // 表示不拦截，专门放行的白名单
                .excludePathPatterns("/user/login",
                        "/user/register",
                        "/category/list",
                        "/book/searchBook",
                        "/book/findByCategory/**",
                        "/book/showBooks");
    }

    // 配置跨域请求处理
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        // /** 表示支持所有的路径，如果配置的是/*，那么表示支持所有的一级路径
        registry.addMapping("/**")
                // 表示支持所有的域名，如果是生产环境，应该配置具体的域名
                .allowedOriginPatterns("*")
                // 表示支持所有的请求方法，包括GET、POST、PUT、DELETE等
                .allowedMethods("*")
                // 表示支持所有的请求头，包括自定义的请求头
                .allowedHeaders("*")
                // 表示是否允许发送Cookie信息
                .allowCredentials(true)
                // 表示预检请求的有效期，单位为秒
                .maxAge(3600);
    }
}
